package omm.domain.evolutiongraph;

import java.util.Map;

import org.joda.time.DateTime;
import org.springframework.format.annotation.DateTimeFormat;

//TODO: Ver de refactor como template method
public interface PeriodStrategy {

	/**
	 * Devuelve un map ordenado por el primer dia de cada periodo e inicializado en 0.
	 * 
	 * @return Map de primer dia de cada periodo inicializado
	 */
	public Map<DateTime, Double> calculatePeriods();

	/**
	 * Devuelve el parametro del grafico que indica el ancho de cada barra
	 * 
	 * @return Parametro del grafico que indica el y-axis
	 */
	public Integer calculateBarsWidth();
	
	/**
	 * Devuelve el parametro del grafico que indica la separacion de cada barra
	 * 
	 * @return Parametro del grafico que indica el y-axis
	 */
	public Integer calculateBarsSeparation();
	
	/**
	 * Se fija si modiftime esta en el periodo que indica dt
	 * 
	 * @return True si esta en el periodo, false si no lo esta
	 */
	public boolean isInPeriod(DateTime modifTime, DateTime dt);
	
	/**
	 * Calcula los nombres de los periodos separados por "|"
	 * @return Devuelve los nombres separados por "|"
	 */
	public String calculatePeriodsNames(Map<DateTime, Double> periodsValue);
	
	public String getTitle();
	
	public DateTime getBegin();
	
	public DateTime getEnd();
}
